home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 9 / FM Towns Free Software Collection 9.iso / t_os / tool / vdgear / src / key.c < prev    next >
Text File  |  1994-11-16  |  3KB  |  204 lines

  1. /*
  2.  *    VIDEO GEAR
  3.  *    "key.c"
  4.  *    by Good-Chy
  5.  */
  6.  
  7. #include    "video.h"
  8. #define    is_kanji1(c)    ((0x81<=c && c<=0x9f) || (0xe0<=c && c<=0xfc))
  9. #define    is_kanji2(c)    ((0x40<=c && c<=0x7e) || (0x80<=c && c<=0xfc))
  10.  
  11. char    tanmoji[] = "単語登録のための文字列";
  12.  
  13. void    cursor_dsp(int flag)
  14.     {
  15.     int    sx;
  16.  
  17.     sx = key_x+ key_cursor*6 + 1;
  18.     EGB_paintMode(egb_work,0x22);
  19.  
  20.     if (flag == 0)        /* 消去 */
  21.         {
  22.         box_full(sx,key_y+1,sx+1,key_y+13,4,4,0);
  23.         }
  24.     else
  25.         {
  26.         box_full(sx,key_y+1,sx+1,key_y+13,10,10,0);
  27.         }
  28.     }
  29.  
  30. void    print(int flag, char *moji)
  31.     {
  32.     int    sx, vec;
  33.  
  34.     sx = key_x + key_cursor*6 + 1;
  35.     EGB_paintMode(egb_work,0x22);
  36.     cursor_dsp(0);
  37.  
  38.     if (flag == 1)        /* 漢字 */
  39.         {
  40.         box_full(sx,key_y+1,sx+11,key_y+12,4,4,0);
  41.         *(key_buff+key_cursor  ) = *(moji+0);
  42.         *(key_buff+key_cursor+1) = *(moji+1);
  43.         vec = 2;
  44.         }
  45.     else
  46.         {
  47.         box_full(sx,key_y+1,sx+ 5,key_y+12,4,4,0);
  48.         *(key_buff+key_cursor) = *(moji+0);
  49.         vec = 1;
  50.         }
  51.  
  52.     sprint(moji,sx,key_y+13,15,0,12,12,0);
  53.     key_cursor += vec;
  54.     cursor_dsp(1);
  55.     }
  56.  
  57. void    elase(int flag)
  58.     {
  59.     int    i,sx;
  60.  
  61.     EGB_paintMode(egb_work,0x22);
  62.     cursor_dsp(0);
  63.  
  64.     for (i=0 ; i<flag ; i++)
  65.         {
  66.         key_cursor--;
  67.         sx = key_x + key_cursor*6 + 1;
  68.         box_full(sx,key_y+1,sx+5,key_y+13,4,4,0);
  69.         *(key_buff+key_cursor) = '\0';
  70.         }
  71.     cursor_dsp(1);
  72.     }
  73.  
  74. void    line_input()
  75.     {
  76.     unsigned    int    str, strs, encode;
  77.     char    moji[3];
  78.  
  79.     str = KYB_read(1,&encode);
  80.     if ((str & 0xff) != 0xff)
  81.         {
  82.         if (((str & 0xff) >= ' ') && ((str & 0xff) != 0x7f))
  83.             {
  84.             if (is_kanji1(str))
  85.                 {
  86.                 strs = KYB_read(1,&encode);
  87.                 if (key_cursor < key_len-1)
  88.                     {
  89.                     moji[0] = str;
  90.                     moji[1] = strs;
  91.                     moji[2] = '\0';
  92.                     print(1,moji);
  93.                     }
  94.                 }
  95.             else
  96.                 {
  97.                 if (key_cursor < key_len)
  98.                     {
  99.                     moji[0] = str;
  100.                     moji[1] = '\0';
  101.                     print(0,moji);
  102.                     }
  103.                 }
  104.             }
  105.         else
  106.             {
  107.             if ((str & 0xff) == 0x08)        /*BS*/
  108.                 {
  109.                 if (key_cursor-2 >= 0)
  110.                     {
  111.                     if (is_kanji1(*(key_buff+key_cursor-2)) &&
  112.                             (is_kanji2(*key_buff+key_cursor-1)))
  113.                         {
  114.                         elase(2);
  115.                         }
  116.                     else
  117.                         {
  118.                         elase(1);
  119.                         }
  120.                     }
  121.                 else
  122.                     {
  123.                     if (key_cursor-1 >= 0)
  124.                         {
  125.                         elase(1);
  126.                         }
  127.                     }
  128.                 }
  129.             }
  130.         }
  131.     }
  132.  
  133. void    GetString(char *code)
  134.     {
  135.     int    len;
  136.  
  137.     strcpy(code, tanmoji);
  138.     len = strlen(tanmoji);
  139.     memset(&code[len], '\0', 80-len);
  140.     }
  141.  
  142. void    GetDspPos(int *x, int *y)
  143.     {
  144.     *x = key_x + key_cursor*6+1;
  145.     *y = key_y + 1;
  146.     }
  147.  
  148. void    kana_init()            /* 仮名漢字の初期化 */
  149.     {
  150.     KANJ    prm;
  151.  
  152.     prm.scrn    = KAN_SCRN16;
  153.     prm.egbw    = egb_work;
  154.     prm.wPage    = 0;
  155.     prm.mosAp    = KAN_MOSON;
  156.     prm.gets    = GetString;
  157.     prm.getPos    = GetDspPos;
  158.     prm.maxX    = 639;
  159.     prm.maxY    = 479;
  160.  
  161.     KAN_prepare(&prm);
  162.     KYB_init();
  163.     KYB_clic(1);
  164.     }
  165.  
  166. void    kana_end()            /* 仮名漢字の終了 */
  167.     {
  168.     KAN_finish();
  169.     }
  170.  
  171. void    key_buff_clear()
  172.     {
  173.     int    i;
  174.  
  175.     cursor_dsp(0);
  176.     box_full(key_x+1,key_y+1,key_x+key_len*6+6,key_y+13,4,4,0);
  177.  
  178.     for (i=0 ; i<80 ; i++)
  179.         {
  180.         key_buff[i] = '\0';
  181.         }
  182.  
  183.     key_cursor = 0;
  184.     cursor_dsp(1);
  185.     }
  186.  
  187. void    key_start(int x, int y, int len)
  188.     {
  189.     key_flag   = 1;
  190.     key_len    = len;
  191.     key_x      = x;
  192.     key_y      = y;
  193.  
  194.     KAN_disp(KAN_DISPON);
  195.     key_buff_clear();
  196.     }
  197.  
  198. void    key_end()
  199.     {
  200.     key_flag   = 0;
  201.     KAN_disp(KAN_DISPOFF);
  202.     cursor_dsp(0);
  203.     }
  204.